#ifndef SUPCELL_H
#define SUPCELL_H

/*! @brief The SupCell Class is used to represent a "real" object inside a SupArray.
/*     A SupCell can take more than one base "Cell" inside the sup array.
/*     Thus, A supCell store it's position inside the SupArray, and the "space" */
template <class T>
class SupCell
{
    public:

    /**************************************
    /*          Constructors
    /**************************************/

        /*!  @brief <summary> The simpliest constructor will create a Cell with a 1*1*1 mask */
        SupCell(T value);

        SupCell(int *** mask, T value);

    /**************************************
    /*          Properties
    /**************************************/

        /**************************************
        /*          Members
        /**************************************/

            int***  m_Mask;         /*!< Mask used to determine the "shape" of the SupCell  */

            int     X;              /*!< X position inside the SupArray         */
            int     Y;              /*!< Y position inside the SupArray         */
            int     Z;              /*!< Y position inside the SupArray         */

            int     m_Index;        /*!< Index value of the Cell inside the Array   */

            T       m_Value;

        /**************************************
        /*          Accessors
        /**************************************/

            int Width()      { return m_Width;   }
            int Height()     { return m_Height;  }
            int Depth()      { return m_Depth;   }

    /**************************************
    /*          Methods
    /**************************************/


        int SetMask(int*** mask);
        int * SetRectMask(int width, int height);

    private :

    /**************************************
    /*          Properties
    /**************************************/

        /**************************************
        /*          Members
        /**************************************/

            int     m_Width;        /*!< Width of the Cell's mask       */
            int     m_Height;       /*!< Height of the Cell's mask      */
            int     m_Depth;        /*!< Depth of the Cell's mask      */

    /**************************************
    /*          Methods
    /**************************************/

        /**************************************
        /*          Member
        /**************************************/

            Initialize(int *** mask, T value);
            void SetMask(int ***mask);

};

#endif // SUPCELL_H





